home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 1.0 beta / flock-1.0RC3.en-US.win32.exe / flock / components / flockSearchMigratable.js < prev    next >
Text File  |  2007-10-18  |  6KB  |  209 lines

  1. //
  2. // BEGIN FLOCK GPL
  3. // 
  4. // Copyright Flock Inc. 2005-2007
  5. // http://flock.com
  6. // 
  7. // This file may be used under the terms of of the
  8. // GNU General Public License Version 2 or later (the "GPL"),
  9. // http://www.gnu.org/licenses/gpl.html
  10. // 
  11. // Software distributed under the License is distributed on an "AS IS" basis,
  12. // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13. // for the specific language governing rights and limitations under the
  14. // License.
  15. // 
  16. // END FLOCK GPL
  17. //
  18.  
  19. const SM_CONTRACTID = '@flock.com/search-migratable;1';
  20. const SM_CLASSID    = Components.ID('{24ddbfe0-4216-40cb-a037-2c17ab7d5a47}');
  21. const SM_CLASSNAME  = 'Flock Search Service Migratable';
  22.  
  23. const SEARCHELSEWHERE_EXCLUSION_PREF  = "flock.search.excludedEngines";
  24.  
  25. const Cc = Components.classes;
  26. const Ci = Components.interfaces;
  27. const Cr = Components.results;
  28.  
  29.  
  30. function SearchMigratable() {
  31. }
  32.  
  33. SearchMigratable.prototype = {
  34.   get migrationName() { return "Search Preferences"; },
  35.  
  36.   needsMigration: function SM_needsMigration(oldVersion) {
  37.     var minorVersion = oldVersion.substr(0, 3);
  38.     if (minorVersion == "0.7" || minorVersion == "0.9") {
  39.       var prefs = Cc['@mozilla.org/preferences-service;1']
  40.         .getService(Ci.nsIPrefBranch);
  41.       return prefs.prefHasUserValue(SEARCHELSEWHERE_EXCLUSION_PREF);
  42.     } else {
  43.       return false;
  44.     }
  45.   },
  46.   startMigration: function SM_startMigration(oldVersion, listener) {
  47.     var minorVersion = oldVersion.substr(0, 3);
  48.  
  49.     var prefs = Cc['@mozilla.org/preferences-service;1']
  50.       .getService(Ci.nsIPrefBranch);
  51.     var excluded = prefs.getCharPref(SEARCHELSEWHERE_EXCLUSION_PREF);
  52.  
  53.     var ctxt = {
  54.       listener: listener,
  55.       minorVersion: minorVersion,
  56.  
  57.       oldExcluded: excluded.split(","),
  58.       newExcluded: []
  59.     };
  60.  
  61.     if (minorVersion == "0.7") {
  62.       var engineMap = {};
  63.  
  64.       var searchService = Cc["@mozilla.org/browser/search-service;1"]
  65.                           .getService(Ci.nsIBrowserSearchService);
  66.       var engines = searchService.getEngines({});
  67.  
  68.       for each (var engine in engines) {
  69.         engine = engine.wrappedJSObject;
  70.  
  71.         var engineFile;
  72.         if (engine._unconvertedFile) {
  73.           engineFile = engine._unconvertedFile;
  74.         } else {
  75.           engineFile = engine._file;
  76.         }
  77.  
  78.         engineMap[engineFile.leafName] = engine.name;
  79.       }
  80.  
  81.       ctxt.engineMap = engineMap;
  82.     }
  83.  
  84.     return { wrappedJSObject: ctxt };
  85.   },
  86.   finishMigration: function SM_finishMigration(ctxtWrapper) {
  87.     var ctxt = ctxtWrapper.wrappedJSObject;
  88.  
  89.     var prefs = Cc['@mozilla.org/preferences-service;1']
  90.       .getService(Ci.nsIPrefBranch);
  91.     prefs.setCharPref(SEARCHELSEWHERE_EXCLUSION_PREF, ctxt.newExcluded.join());
  92.   },
  93.   doMigrationWork: function SM_doMigrationWork(ctxtWrapper) {
  94.     var ctxt = ctxtWrapper.wrappedJSObject;
  95.  
  96.     var oldEngine = ctxt.oldExcluded.shift();
  97.     var newEngine;
  98.  
  99.     if (ctxt.minorVersion == "0.7") {
  100.       var engineFilename =
  101.         oldEngine.replace("NC:SearchCategory?engine=urn:search:engine:", "");
  102.       newEngine = ctxt.engineMap[engineFilename];
  103.     } else if (ctxt.minorVersion == "0.9") {
  104.       newEngine = oldEngine;
  105.     }
  106.  
  107.     if (newEngine) {
  108.       if (newEngine == "Yahoo") {
  109.         newEngine = "Yahoo!";
  110.       }
  111.       ctxt.newExcluded.push(newEngine);
  112.     }
  113.  
  114.     return Boolean(ctxt.oldExcluded.length);
  115.   },
  116.  
  117.   getInterfaces: function SM_getInterfaces(countRef) {
  118.     var interfaces = [Ci.flockIMigratable, Ci.nsIClassInfo, Ci.nsISupports];
  119.     countRef.value = interfaces.length;
  120.     return interfaces;
  121.   },
  122.   getHelperForLanguage: function SM_getHelperForLanguage(language) {
  123.     return null;
  124.   },
  125.   contractID: SM_CONTRACTID,
  126.   classDescription: SM_CLASSNAME,
  127.   classID: SM_CLASSID,
  128.   implementationLanguage: Ci.nsIProgrammingLanguage.JAVASCRIPT,
  129.   flags: Ci.nsIClassInfo.SINGLETON,
  130.  
  131.   QueryInterface: function SM_QueryInterface(iid) {
  132.     if (iid.equals(Ci.flockIMigratable) ||
  133.         iid.equals(Ci.nsIClassInfo) ||
  134.         iid.equals(Ci.nsISupports))
  135.       return this;
  136.     throw Cr.NS_ERROR_NO_INTERFACE;
  137.   }
  138. }
  139.  
  140.  
  141. function GenericComponentFactory(ctor) {
  142.   this._ctor = ctor;
  143. }
  144.  
  145. GenericComponentFactory.prototype = {
  146.  
  147.   _ctor: null,
  148.  
  149.   // nsIFactory
  150.   createInstance: function(outer, iid) {
  151.     if (outer != null)
  152.       throw Cr.NS_ERROR_NO_AGGREGATION;
  153.     return (new this._ctor()).QueryInterface(iid);
  154.   },
  155.  
  156.   // nsISupports
  157.   QueryInterface: function(iid) {
  158.     if (iid.equals(Ci.nsIFactory) ||
  159.         iid.equals(Ci.nsISupports))
  160.       return this;
  161.     throw Cr.NS_ERROR_NO_INTERFACE;
  162.   },
  163. };
  164.  
  165. var Module = {
  166.   QueryInterface: function(iid) {
  167.     if (iid.equals(Ci.nsIModule) ||
  168.         iid.equals(Ci.nsISupports))
  169.       return this;
  170.  
  171.     throw Cr.NS_ERROR_NO_INTERFACE;
  172.   },
  173.  
  174.   getClassObject: function(cm, cid, iid) {
  175.     if (!iid.equals(Ci.nsIFactory))
  176.       throw Cr.NS_ERROR_NOT_IMPLEMENTED;
  177.  
  178.     if (cid.equals(SM_CLASSID))
  179.       return new GenericComponentFactory(SearchMigratable)
  180.  
  181.     throw Cr.NS_ERROR_NO_INTERFACE;
  182.   },
  183.  
  184.   registerSelf: function(cm, file, location, type) {
  185.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  186.     cr.registerFactoryLocation(SM_CLASSID, SM_CLASSNAME, SM_CONTRACTID,
  187.                                file, location, type);
  188.  
  189.     var catman = Cc['@mozilla.org/categorymanager;1']
  190.       .getService(Ci.nsICategoryManager);
  191.     catman.addCategoryEntry('flockMigratable', SM_CLASSNAME, SM_CONTRACTID,
  192.                             true, true);
  193.   },
  194.  
  195.   unregisterSelf: function(cm, location, type) {
  196.     var cr = cm.QueryInterface(Ci.nsIComponentRegistrar);
  197.     cr.unregisterFactoryLocation(SM_CLASSID, location);
  198.   },
  199.  
  200.   canUnload: function(cm) {
  201.     return true;
  202.   },
  203. };
  204.  
  205. function NSGetModule(compMgr, fileSpec)
  206. {
  207.   return Module;
  208. }
  209.